<?php
session_start();
require_once '../model/OM.php';
class OmDLO {

    private $oms = array();
    private static $omDLO;

    private function __construct() {
    }

    /**
     * @method OmDLO getInstance() para obter uma única instância do controlador
     * @return OmDLO
     */
    public static function &getInstance() {
        if (!isset (self::$omDLO)) {
            if (!isset ($_SESSION['omDLO'])) {
                $_SESSION['omDLO'] = serialize(new OmDLO());
            }
            self::$omDLO = unserialize($_SESSION['omDLO']);
        }
        return self::$omDLO;
    }

    public function cadastrar(&$nome, &$sigla) {
        $om = new OM();
        $om->setNome($nome);
        $om->setSigla($sigla);
        $om->cadastrar();
    }

    public function &listar() {
        $result = &OM::listar();
        $resultado = array();
        for ($i = 0; $i < sizeof($result); $i++) {
            $row = array();
            $row['cod_om'] = &$result[$i]->getCod_om();
            $row['nome'] = &$result[$i]->getNome();
            $row['sigla'] = &$result[$i]->getSigla();
            $resultado[$i] = &$row;
            unset ($row);
        }
        return $resultado;
    }

    public function excluir(&$cod_om) {
        $om = null;
        if (isset ($this->oms[$cod_om])) {
            $om = &$this->oms[$cod_om];
        } else {
            $om = &OM::consultar($cod_om);
            $this->oms[$cod_om] = &$om;
            $_SESSION['omDLO'] = serialize($this);
        }
        if ($om->isVinculado() == 1) {
            throw new Exception("Recurso vinculado");
        }
        $om->excluir();
        unset ($this->oms[$cod_om]);
        $_SESSION['omDLO'] = serialize($this);
    }

    public function alterar(&$cod_om, &$campo_id, &$campo_valor) {
        $om = null;
        if (isset ($this->oms[$cod_om])) {
            $om = &$this->oms[$cod_om];
        } else {
            $om = &OM::consultar($cod_om);
            $this->oms[$cod_om] = &$om;
            $_SESSION['omDLO'] = serialize($this);
        }
        if ($om->isVinculado() == 1) {
            throw new Exception("Recurso vinculado");
        }
        $om->alterarCampo($campo_id, $campo_valor);
        $this->oms[$cod_om] = &$om;
        $_SESSION['omDLO'] = serialize($this);
    }

    public function &consultar(&$cod_om) {
        $om = null;
        if (isset ($this->oms[$cod_om])) {
            $om = &$this->oms[$cod_om];
        } else {
            $om = &OM::consultar($cod_om);
            $this->oms[$cod_om] = &$om;
            $_SESSION['omDLO'] = serialize($this);
        }
        $row = array();
        $row['cod_om'] = &$om->getCod_om();
        $row['nome'] = &$om->getNome();
        $row['sigla'] = &$om->getSigla();
        $row['vinculado'] = &$om->isVinculado();
        return $row;
    }
}
?>